/*
* 1. 封装功能函数
*   1. 功能点明确
*   2. 函数内部应该保留固定代码(静态的)
*   3. 将动态的数据抽取成形参，由使用者根据自身的情况动态的传入实参
*   4. 一个良好的功能函数应该设置形参的默认值(ES6的形参默认值)
* 2. 封装功能组件
*   1. 功能点明确
*   2. 组件内部保留静态的代码
*   3. 将动态的数据抽取成props参数，由使用者根据自身的情况以标签属性的形式动态传入props数据
*   4. 一个良好的组件应该设置组件的必要性及数据类型
* */
// 服务器配置对象
import config from './config'

// 封装发送 ajax 请求的功能函数
export default (url,data={},method='GET') => {
  return new Promise((resolve,reject) => {
    // 1、初始化 Promise 状态为 pending
    // 2、执行异步任务
    wx.request({
      url: config.host + url,
      data,
      method,
      header: {
        // 主动调用一下数组的 toString 方法,否则会调用 Object 原型上的 toString 方法
        cookie: wx.getStorageSync('cookies') ? wx.getStorageSync('cookies').toString() : ''
      },
      success: (res) => {
        // 如果是登录请求,则将用户 cookie 保存至本地
        if(data.isLogin){
          wx.setStorageSync('cookies',res.cookies)
        }
        // 修改 promise 状态为成功状态 resolve
        resolve(res.data)
      },
      fail: (err) => {
        console.log('请求失败',err)
        // 修改 promise 状态为失败状态 reject
        reject(err)
      },
      complete: () => {
        wx.removeStorageSync('cookies')
      }
    })
  })
}